package com.doit.day02

import scala.util.control.Breaks

/*
需求：定义一个方法，传入一个参数，这个参数必须得是1-9，如果是其他的，就打印一句话，你上课不听话
如果说是1-9，打印九乘法表，传进去的是几，就打印到几

需求2：定义一个方法，找到所有的水仙花数
水仙花数：首先他是一个三位数   100 -> 999
个位的三次方 + 十位的三次方 + 百位的三次方 = 它本身 ==》 满足这个条件的数叫水仙花数
123==》3的3次方 = 27 2的三次方= 8 1的三次方 = 1 ==》 27+1+8 = 36 ！= 123 =》 就不是一个水仙花数

需求3：定义两个数组，
找出两个数组中的差集
找出两个数组中的并集 ,先不用去重
找出两个数组中的交集

 */
object Exercise01 {
  def main(args: Array[String]): Unit = {
    //这是一个不可变的数组

    val ints: Array[Int] = Array(1, 2, 3, 4, 5)
    val ints1: Array[Int] = Array(3, 4, 5, 6, 7, 8)
    //取差集    首先通过ints的长度 - 交集的长度==》 就能得到最终差集的长度
    val res: Array[Int] = new Array[Int](ints.length - 3)

    var index = 0
    var flag = true
    for (elem <- ints) {
      for (elem1 <- ints1) {
        //代表有元素相等，就不需要添加
        if(elem == elem1){
          flag = false
        }
      }
      //如果他是true 代表没有元素相等，就需要添加
      if (flag){
        res(index) = elem
        index += 1
      }
      flag = true
    }
    println(res.mkString(","))












    //交集

    //想要确定交集  创建一个结果数组==》这个结果数组的长度是多少
    //先确定长度
    /*  var count = 0
      for (elem <- ints) {
        for (elem1 <- ints1) {
          //如果相等，代表有相同的数 ==》 就是交集
          if (elem == elem1) {
            count += 1
          }
        }
      }

      var index = 0
      //循环完成之后，数组的长度就确定了
      val res: Array[Int] = new Array[Int](count)
      for (elem <- ints) {
        for (elem1 <- ints1) {
          //如果相等，代表有相同的数 ==》 就是交集
          if (elem == elem1) {
            //将相同的结果写入到结果数组中，依次的赋值
            res(index) = elem1
            index += 1
          }
        }
      }*/
    //确定结果并集去重后数组的长度
  /*  val ints2: Array[Int] = new Array[Int](ints.length + ints1.length - 3)

    var flag = true
    var cnt = 0

    //获得的是ints 的遍历，我能够获取到所有ints数组中的每一个元素
    for (elem <- 0 until ints.length) {
      //将结果数组中所有的元素都获取出来
      for (elem1 <- ints2) {
        //只要有一个不重复的我就添加
        //要的是都不重复，我才添加
        if (ints(elem) == elem1) {
          //代表里面有值
          flag = false
        }
      }
      //如果能够进入到这里面，是不是代表flag= true
      if (flag) {
        //赋值
        ints2(cnt) = ints(elem)
        cnt += 1
        flag = true
      }
    }

    //添加第二个数组的元素   如果说，breakable(代码)    如果跳出循环，就是整个的 breakable里面的代码
    for (elem <- 0 until ints1.length) {
        //将结果数组中所有的元素都获取出来
        Breaks.breakable(
          for (elem1 <- ints2) {
          //只要有一个不重复的我就添加
          //要的是都不重复，我才添加
          if (ints1(elem) == elem1) {
            //代表里面有值
            flag = false
            //一旦中断了，就循环中断
            Breaks.break()
          }
        })

        //如果能够进入到这里面，是不是代表flag= true
        if (flag) {
          //赋值
          ints2(cnt) = ints1(elem)
          cnt += 1
        }
        flag = true
      }
    println(ints2.mkString(","))*/

  }

  //定义一个方法
//  def jiujiu(num: Int) = {
//    //判断传进去的值 判断这个num是在1-9之间(包含)还是1-9之外
//    if (num > 9 || num < 1) { //不满足我们的条件
//      println("你是一个不听话的宝宝！！！")
//    } else {
//      //这里面就是满足条件的，我就要打印99乘法表
//      /* for(i <- 1 to num){
//         for(j <- 1 to i ){
//           print(s"${i} * $j = ${i*j}\t")
//         }
//         //里面的循环走完了，就需要换行
//         println()
//       }*/
//      for (i <- 1 to num; j <- 1 to i) {
//        print(s"${i} * $j = ${i * j}\t")
//        //判断什么时候换行
//        if (i == j) println()
//      }
//
//    }
//
//
//  }

}
